package net.sh.dpinfrastructure.util;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;

import org.apache.commons.lang3.StringUtils;

/**
 * 
 * 运行时帮助类
 * 
 * @version 1.0
 * @since JDK1.7
 * @author shaohui
 * @company 上海朝阳永续信息技术有限公司
 * @copyright (c) 2017 SunTime Co'Ltd Inc. All rights reserved.
 * @date 2017年1月23日 下午1:59:04
 */
public class DPRuntimeUtils {

    /**
     * 带命名空间的计数器
     */
    private static final ConcurrentHashMap<String, AtomicLong> COUNTERMAP = new ConcurrentHashMap<>();
    
    /**
     * 全局计数器
     */
    private static final AtomicLong COUNTER = new AtomicLong();
    
    /**
     * 
     * 每调用一次这个方法就自增1，并返回当前个数
     *
     * @return
     * 
     * @author shaohui
     * @date 2017年3月21日 下午6:36:04
     */
    public static long increment() {
        return COUNTER.incrementAndGet();
    }
    
    /**
     * 
     * 指定命名空间自增1，并返回当前个数
     *
     * @param name
     * @return
     * 
     * @author shaohui
     * @date 2017年3月21日 下午6:57:57
     */
    public static long increment(String name) {
        if (StringUtils.isBlank(name)) {
            throw new IllegalArgumentException("name is empty");
        }
        if (COUNTERMAP.get(name) == null) {
            COUNTERMAP.putIfAbsent(name, new AtomicLong(1));
            return 1;
        }
        return COUNTERMAP.get(name).incrementAndGet();
    }
}
